/**
 * 通用页面导航工具
 * 提供统一的页面跳转、标签页管理等功能
 */
(function(window) {
    'use strict';
    
    // 页面导航工具对象
    var PageNavigator = {
        /**
         * 通用页面跳转方法
         * @param {string} url - 目标URL
         * @param {string} title - 页面标题
         * @param {object} options - 选项配置
         */
        navigateTo: function(url, title, options) {
            options = options || {};
            title = title || '页面';
            
            if (!url) {
                console.error('PageNavigator.navigateTo: URL不能为空');
                return;
            }
            
            try {
                // 记录导航日志
                console.log('PageNavigator: 正在导航到', {url: url, title: title, options: options});
                
                // 优先使用父页面框架
                if (parent && parent !== window) {
                    // 检查是否有addTab方法（标签页模式）
                    if (typeof parent.addTab === 'function') {
                        var tabId = options.tabId || 'tab_' + Date.now();
                        parent.addTab(title, url, tabId);
                        console.log('PageNavigator: 使用标签页模式打开页面');
                        return;
                    }
                    
                    // 检查是否有loadPage方法（iframe模式）
                    if (typeof parent.loadPage === 'function') {
                        parent.loadPage(url);
                        console.log('PageNavigator: 使用iframe模式打开页面');
                        return;
                    }
                    
                    // 检查是否有mainFrame（直接设置iframe src）
                    if (parent.document.getElementById('mainFrame')) {
                        parent.document.getElementById('mainFrame').src = url;
                        console.log('PageNavigator: 使用mainFrame iframe打开页面');
                        return;
                    }
                }
                
                // 降级处理：根据选项决定跳转方式
                if (options.openInNewWindow) {
                    window.open(url, '_blank');
                    console.log('PageNavigator: 在新窗口中打开页面');
                } else if (options.replaceHistory) {
                    window.location.replace(url);
                    console.log('PageNavigator: 替换当前页面历史');
                } else {
                    window.location.href = url;
                    console.log('PageNavigator: 直接跳转到页面');
                }
            } catch (e) {
                console.error('PageNavigator.navigateTo: 页面跳转失败', e);
                // 最后的降级处理
                window.location.href = url;
            }
        },
        
        /**
         * 返回上一页或指定页面
         * @param {string} fallbackUrl - 降级跳转URL
         */
        goBack: function(fallbackUrl) {
            try {
                // 优先尝试关闭当前标签页
                if (parent && parent !== window) {
                    if (typeof parent.closeCurrentTab === 'function') {
                        parent.closeCurrentTab();
                        console.log('PageNavigator: 关闭当前标签页');
                        return;
                    }
                    
                    // 尝试刷新父页面并返回
                    if (fallbackUrl && typeof parent.loadPage === 'function') {
                        parent.loadPage(fallbackUrl);
                        console.log('PageNavigator: 返回到指定页面');
                        return;
                    }
                    
                    // 直接设置父页面iframe
                    if (fallbackUrl && parent.document.getElementById('mainFrame')) {
                        parent.document.getElementById('mainFrame').src = fallbackUrl;
                        console.log('PageNavigator: 设置父页面iframe返回');
                        return;
                    }
                }
                
                // 降级处理
                if (fallbackUrl) {
                    window.location.href = fallbackUrl;
                    console.log('PageNavigator: 直接跳转到指定页面');
                } else if (window.history.length > 1) {
                    window.history.back();
                    console.log('PageNavigator: 使用浏览器历史返回');
                } else {
                    console.warn('PageNavigator: 无法返回，没有可用的返回方式');
                }
            } catch (e) {
                console.error('PageNavigator.goBack: 返回操作失败', e);
                if (fallbackUrl) {
                    window.location.href = fallbackUrl;
                }
            }
        },
        
        /**
         * 刷新当前页面或父页面
         */
        refresh: function() {
            try {
                if (parent && parent !== window && typeof parent.refreshCurrentTab === 'function') {
                    parent.refreshCurrentTab();
                    console.log('PageNavigator: 刷新父页面当前标签');
                } else {
                    location.reload();
                    console.log('PageNavigator: 刷新当前页面');
                }
            } catch (e) {
                console.error('PageNavigator.refresh: 刷新失败', e);
                location.reload();
            }
        },
        
        /**
         * 操作成功后的统一处理
         * @param {string} message - 成功消息
         * @param {string} returnUrl - 返回URL
         * @param {function} callback - 自定义回调函数
         */
        onSuccess: function(message, returnUrl, callback) {
            message = message || '操作成功';
            
            // 如果layui layer可用，使用layer提示
            if (window.layui && window.layui.layer) {
                layui.layer.msg(message, {
                    icon: 1,
                    time: 2000,
                    end: function() {
                        if (callback && typeof callback === 'function') {
                            callback();
                        } else if (returnUrl) {
                            PageNavigator.goBack(returnUrl);
                        } else {
                            PageNavigator.goBack();
                        }
                    }
                });
            } else {
                // 降级到原生alert
                alert(message);
                if (callback && typeof callback === 'function') {
                    callback();
                } else if (returnUrl) {
                    PageNavigator.goBack(returnUrl);
                } else {
                    PageNavigator.goBack();
                }
            }
        },
        
        /**
         * 操作失败后的统一处理
         * @param {string} message - 错误消息
         */
        onError: function(message) {
            message = message || '操作失败';
            
            // 如果layui layer可用，使用layer提示
            if (window.layui && window.layui.layer) {
                layui.layer.msg(message, {icon: 2});
            } else {
                // 降级到原生alert
                alert(message);
            }
        },
        
        /**
         * 确认对话框
         * @param {string} message - 确认消息
         * @param {function} onConfirm - 确认回调
         * @param {function} onCancel - 取消回调
         */
        confirm: function(message, onConfirm, onCancel) {
            message = message || '确定要执行此操作吗？';
            
            // 如果layui layer可用，使用layer确认框
            if (window.layui && window.layui.layer) {
                layui.layer.confirm(message, {
                    btn: ['确定', '取消'],
                    title: '确认操作'
                }, function(index) {
                    if (onConfirm && typeof onConfirm === 'function') {
                        onConfirm();
                    }
                    layui.layer.close(index);
                }, function() {
                    if (onCancel && typeof onCancel === 'function') {
                        onCancel();
                    }
                });
            } else {
                // 降级到原生confirm
                if (confirm(message)) {
                    if (onConfirm && typeof onConfirm === 'function') {
                        onConfirm();
                    }
                } else {
                    if (onCancel && typeof onCancel === 'function') {
                        onCancel();
                    }
                }
            }
        },
        
        /**
         * 显示加载状态
         * @param {string} message - 加载消息
         * @returns {number} 加载层索引
         */
        showLoading: function(message) {
            message = message || '正在处理...';
            
            if (window.layui && window.layui.layer) {
                return layui.layer.load(2, {
                    shade: [0.1, '#fff'],
                    content: message
                });
            }
            return null;
        },
        
        /**
         * 关闭加载状态
         * @param {number} index - 加载层索引
         */
        hideLoading: function(index) {
            if (window.layui && window.layui.layer && index) {
                layui.layer.close(index);
            }
        }
    };
    
    // 暴露到全局
    window.PageNavigator = PageNavigator;
    
    // AMD支持
    if (typeof define === 'function' && define.amd) {
        define(function() {
            return PageNavigator;
        });
    }
    
    // CommonJS支持
    if (typeof module !== 'undefined' && module.exports) {
        module.exports = PageNavigator;
    }
    
})(window); 